package com.clstu.staticmathod_.codeblock_;

public class CodeBlock01 {
    public static void main(String[] args) {
//        BB.say();
//        System.out.println(BB.count);
//        System.out.println(BB.count);
//        new AA();
        new BB();//构造BB对象的时候也会查找执行父类AA的普通代码块，
             // 也会查看是否静态代码块已经被执行，若没有，则执行，且优先级高于普通代码块
    }
}
class AA{
    static {//静态代码块在执行静态方法或者调用静态变量的时候被执行，且执行一次，且会按照查找关系从父类依次执行

        System.out.println("AA 的静态代码块被执行");
    }

    {  //普通代码块不会在调用静态方法或者静态变量的时候被执行，只会在创建对象的时候执行，是构造器的补充，且优先于构造器执行
        System.out.println("AA的普通代码块被执行");
    }
}

class BB extends AA{
    public static int count=0;
    {
        System.out.println("BB 的普同代码块被执行");
    }
    static {
        System.out.println("BB 的静态代码块被执行");
    }

    public static void say(){
        System.out.println("hello , I am BB");
    }
}